infoboxの実装詳細 takker
from 2024/03/14
infoboxの実装詳細takker.icon
api/pages/:project/:titleに生えてる
infoboxという名前でtable記法を書いた時、その要素がinfoboxDefinitionに格納されている
hallucinationって書いてある時点でLLM使ってるの確定だ
Page.infoboxResultはinfobox-menuに表示されるinfoboxのデータ
https://gyazo.com/7440a95dc691a0c42940ad64b2746308
code:ts
// 新規に生えたpropertiesのみ
export interface Page {
infoboxDefinition: string[];
infoboxResult: InfoboxResultItem[];
}
export interface InfoboxResultItem {
hallucination: boolean;
infobox: Record<string, string>;
title: string;
truncated: boolean;
}
さらに、関連ページリストのデータに該当するRelatedPageに、infobox用のpropertyが生えてる
code:ts
export interface RelatedPage {
infoboxResult: InfoboxResultItem[];
}
infoboxResultはProjectRelatedPage(External Linksのデータ)には生えていない
これらがページ下部のinfoboxに表示される
https://gyazo.com/07d7d8aed5251a2ee48576c6e4cb13b3
編集中の更新
LLMの生成が完了したタイミングや、ページデータが更新されたタイミングで、ScrapboxのWebSocketからinfobox:reloadやliteral-database:reloadが送られてくる
infobox:reload:infoboxの変更?
literal-database:reload:おそらくLLMがデータを生成したときに出される
これらが送られてきたらapi/pages/:project/:titleを叩き直してデータを更新している
リンクデータや関連ページデータの更新差分をwebsocketから送っている実装と比べると、だいぶ大雑把な方法に感じるtakker.icon
今後修正する予定なのだろうな
最適化は使われ方がわかった後のほうがコスパ良い基素.icon
MVPではなく、意図された設計でしたtakker.icon
/shokai/文芸的データベース - 文書の作成とそのデータベース化を同時に行なう手法#66ca29e397c29100005eab80